/*!
 * # 数据实体类:
 *  App - App
 * 
 * # 描述:
 *  已经安装的 App。
 *  
 *  Copyright (c), 上海沃恩信息科技有限公司.
 *  All rights reserved.
 *  Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using Pittypat;

namespace Waln.Authority.Users.Data
{
	/// <summary>
	/// App。
	/// </summary>
	/// <remarks>
	/// 已经安装的 App。
	/// </remarks>
	public sealed class App : global::Pittypat.DataModel
	{
		#region 构造函数

		/// <summary>
		/// 初始化 App 类的一个新实例。
		/// </summary>
		public App()
		{
			// Id
			this.Id = null;
			// 开发者代码
			this.DeveloperCode = null;
			// 开发者名称
			this.DeveloperName = null;
			// App 标识符
			this.Identifier = null;
			// App 名称
			this.Name = null;
			// App 版本
			this.Version = null;
			// 模块数目
			this.ModuleCount = null;
			// 描述
			this.Description = null;
			// 位置
			this.Position = null;
			// 安装时间
			this.InstallTime = null;
		}

		#endregion

		#region 属性

		/// <summary>
		/// 获取或者设置Id。
		/// </summary>
		public @uuid? Id { get; set; }

		/// <summary>
		/// 获取或者设置开发者代码。
		/// </summary>
		/// <remarks>
		/// App 开发者代码。
		/// </remarks>
		public @string? DeveloperCode { get; set; }

		/// <summary>
		/// 获取或者设置开发者名称。
		/// </summary>
		/// <remarks>
		/// App 开发者的名称。
		/// </remarks>
		public @string? DeveloperName { get; set; }

		/// <summary>
		/// 获取或者设置App 标识符。
		/// </summary>
		/// <remarks>
		/// App 的标识符。
		/// </remarks>
		public @string? Identifier { get; set; }

		/// <summary>
		/// 获取或者设置App 名称。
		/// </summary>
		/// <remarks>
		/// App 的名称。
		/// </remarks>
		public @string? Name { get; set; }

		/// <summary>
		/// 获取或者设置App 版本。
		/// </summary>
		/// <remarks>
		/// App 的版本号。
		/// </remarks>
		public @string? Version { get; set; }

		/// <summary>
		/// 获取或者设置模块数目。
		/// </summary>
		/// <remarks>
		/// App 中模块的数目。
		/// </remarks>
		public @int16? ModuleCount { get; set; }

		/// <summary>
		/// 获取或者设置描述。
		/// </summary>
		/// <remarks>
		/// 对 App 的描述信息。
		/// </remarks>
		public @string? Description { get; set; }

		/// <summary>
		/// 获取或者设置位置。
		/// </summary>
		/// <remarks>
		/// 在导航列表中，App 的先后顺序，这是由系统管理员设置的顺序。
		/// </remarks>
		public @int32? Position { get; set; }

		/// <summary>
		/// 获取或者设置安装时间。
		/// </summary>
		/// <remarks>
		/// App 的安装时间。
		/// </remarks>
		public @datetime? InstallTime { get; set; }

		#endregion

		#region 方法

		/// <summary>
		/// 从一个 DbDataReader 中读取此对象。
		/// </summary>
		/// <param name="reader">包含对象数据的 DbDataReader 对象。</param>
		/// <exception cref="global::System.ArgumentNullException">reader 是 null。</exception>
		public override void Read(global::System.Data.Common.DbDataReader reader)
		{
			if (reader == null)
			{
				throw new global::System.ArgumentNullException("reader");
			}

			// Id
			this.Id = reader.GetValue<@uuid>("Id", defaultValue: this.Id);

			// 开发者代码
			this.DeveloperCode = reader.GetValue<@string>("DeveloperCode", defaultValue: this.DeveloperCode);

			// 开发者名称
			this.DeveloperName = reader.GetValue<@string>("DeveloperName", defaultValue: this.DeveloperName);

			// App 标识符
			this.Identifier = reader.GetValue<@string>("Identifier", defaultValue: this.Identifier);

			// App 名称
			this.Name = reader.GetValue<@string>("Name", defaultValue: this.Name);

			// App 版本
			this.Version = reader.GetValue<@string>("Version", defaultValue: this.Version);

			// 模块数目
			this.ModuleCount = reader.GetValue<@int16>("ModuleCount", defaultValue: this.ModuleCount);

			// 描述
			this.Description = reader.GetValue<@string>("Description", defaultValue: this.Description);

			// 位置
			this.Position = reader.GetValue<@int32>("Position", defaultValue: this.Position);

			// 安装时间
			this.InstallTime = reader.GetValue<@datetime>("InstallTime", defaultValue: this.InstallTime);
		}

		/// <summary>
		/// 将当前对象作为 JSON 字符串写入指定的文本流。
		/// </summary>
		/// <param name="writer">目标文本流。</param>
		/// <exception cref="global::System.ArgumentNullException">writer 是 null。</exception>
		public override void Write(global::System.IO.TextWriter writer)
		{
			if (writer == null)
			{
				throw new global::System.ArgumentNullException("writer");
			}

			writer.Write('{');

			// Id
			writer.Write("\"id\":");
			this.Id.Write(writer);
			writer.Write(',');

			// 开发者代码
			writer.Write("\"developerCode\":");
			this.DeveloperCode.Write(writer);
			writer.Write(',');

			// 开发者名称
			writer.Write("\"developerName\":");
			this.DeveloperName.Write(writer);
			writer.Write(',');

			// App 标识符
			writer.Write("\"identifier\":");
			this.Identifier.Write(writer);
			writer.Write(',');

			// App 名称
			writer.Write("\"name\":");
			this.Name.Write(writer);
			writer.Write(',');

			// App 版本
			writer.Write("\"version\":");
			this.Version.Write(writer);
			writer.Write(',');

			// 模块数目
			writer.Write("\"moduleCount\":");
			this.ModuleCount.Write(writer);
			writer.Write(',');

			// 描述
			writer.Write("\"description\":");
			this.Description.Write(writer);
			writer.Write(',');

			// 位置
			writer.Write("\"position\":");
			this.Position.Write(writer);
			writer.Write(',');

			// 安装时间
			writer.Write("\"installTime\":");
			this.InstallTime.Write(writer);

			writer.Write('}');
		}

		#endregion
	}
}
